﻿#include "pch.h"
#include "Const.h"
#include "UserListView.h"

/**
 * 添加一个表项。
 * @param itemText  表项文字
 * @param iconIndex 图标索引
 * @param colorful  彩色则为 TRUE，灰色则为 FALSE
 */
void UserListView::AddItem(LPCTSTR itemText, int iconIndex, BOOL colorful) {
    // 添加表项
    int itemIndex = CListCtrl::GetItemCount();
    CListCtrl::InsertItem(itemIndex, itemText, iconIndex);

    // 设置图标颜色
    if (!colorful) {
        CListCtrl::SetItemState(itemIndex, LVIS_CUT, LVIS_CUT);
    }
}

/**
 * 改变某个表项的图标颜色。
 * @param itemText  表项的文字
 * @param colorful  彩色则为 TRUE，灰色则为 FALSE
 */
void UserListView::ChangeItemColor(LPCTSTR itemText, BOOL colorful) {
    // 查找表项
    LVFINDINFO findInfo = { LVFI_STRING, itemText };
    int itemIndex = CListCtrl::FindItem(&findInfo);
    if (itemIndex < 0) {
        return;
    }

    // 设置图标颜色
    if (colorful) {
        CListCtrl::SetItemState(itemIndex, 0, LVIS_CUT);
    } else {
        CListCtrl::SetItemState(itemIndex, LVIS_CUT, LVIS_CUT);
    }
}

/**
 * 在子类化之前调用的方法。
 */
void UserListView::PreSubclassWindow() {
    CListCtrl::PreSubclassWindow();

    // 创建图标列表
    mIconList.Create(Const::ICON_SIZE, Const::ICON_SIZE, ILC_COLOR32 | ILC_MASK, Const::ICON_COUNT, 0);
    HICON icon = NULL;
    CString iconFilePath;
    for (int i = 0; i < Const::ICON_COUNT; i++) {
        iconFilePath.Format(Const::ICON_FILE_PATH, i);
        icon = (HICON)LoadImage(NULL, iconFilePath, IMAGE_ICON, Const::ICON_SIZE, Const::ICON_SIZE, LR_LOADFROMFILE);
        mIconList.Add(icon);
    }

    // 设置图标列表
    CListCtrl::SetImageList(&mIconList, LVSIL_NORMAL);
    CListCtrl::SetImageList(&mIconList, LVSIL_SMALL);

    // 设置图标间距
    CListCtrl::SetIconSpacing(Const::ICON_SIZE + 8, 1);
}
